package com.gjy.design.decorator.s2;

import java.lang.reflect.Proxy;

/**
 * @author gjy
 * @version 1.0
 * @since 2025-11-10 10:20:16
 */
public class DynamicProxyDecorators {

    // 简单缓存装饰器（线程安全）
    public static <T> T caching(T target, long ttlMs) {
        Class<?> clazz = target.getClass();
        return (T) Proxy.newProxyInstance(
                clazz.getClassLoader(),
                clazz.getInterfaces(),
                (proxy, method, args) -> {
                    // 仅拦截无参数方法（示例）
                    if (args == null || args.length == 0) {
                        String key = method.getName();
                        // 根据方法名做简单缓存键
                        Object cached = Cache.get(key);
                        if (cached != null) return cached;
                        Object result = method.invoke(target, args);
                        Cache.put(key, result, ttlMs);
                        return result;
                    }
                    return method.invoke(target, args);
                }
        );
    }

}
